<!DOCTYPE html>
<html lang="en">
<head>
	<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
	<meta charset="utf-8">
	<meta name="theme-color" content="#222222">
	<meta content="yes" name="apple-mobile-web-app-capable">
	<link rel="shortcut icon" href=""/>
	<title>WLED</title>
	<script>
	function feedback(){}
	// instead of including [script src="iro.js"][/script] and [script src="rangetouch.js"][/script]
	// (which would be inlined by nodeJS inliner during minimization and compression) we need to load them dynamically
	// the following is needed to load iro.js and rangetouch.js as consecutive requests to allow ESP8266
	// to keep up with requests (if requests happent too fast some may not get processed)
	// it will also call onLoad() after last is loaded (it was removed from [body onload="onLoad()"]).
	var h  = document.getElementsByTagName('head')[0];
	var l  = document.createElement('script');
	l.type = 'application/javascript';
	l.src = 'iro.js';
	l.addEventListener('load', (e) => {
		// after iro is loaded initialize global variable
		cpick = new iro.ColorPicker("#picker", {
			width: 260,
			wheelLightness: false,
			wheelAngle: 270,
			wheelDirection: "clockwise",
			layout: [{
				component: iro.ui.Wheel,
				options: {}
			}]
		});
		cpick.on("input:end", () => {setColor(1);});
		cpick.on("color:change", () => {updatePSliders()});
		var l  = document.createElement('script');
		l.type = 'application/javascript';
		l.src = 'rangetouch.js';
		l.addEventListener('load', (e) => {
			// after rangetouch is loaded initialize global variable
			ranges = RangeTouch.setup('input[type="range"]', {});
			let stateCheck = setInterval(() => {
				if (document.readyState === 'complete') {
					clearInterval(stateCheck);
					// document ready, start processing UI
					onLoad();
				}
			}, 100);
		});
		setTimeout(()=>{h.appendChild(l)},100);
	});
	setTimeout(()=>{h.appendChild(l)},100);
	</script>
	<link rel="stylesheet" href="index.css">
</head>
<body>

<div id="cv" class="overlay">Loading WLED UI...</div>
<noscript><div class="overlay" style="opacity:1;">对不起, WLED UI 需要 JavaScript!</div></noscript>
<div id="bg"></div>

<div class="wrapper" id="top">
	<div class="tab top">
		<div class="btnwrap">
			<button id="buttonPower" onclick="togglePower()" class="tgl"><i class="icons">&#xe08f;</i><p class="tab-label">电源</p></button>
			<button id="buttonNl" onclick="toggleNl()"><i class="icons">&#xe2a2;</i><p class="tab-label">定时器</p></button>
			<button id="buttonSync" onclick="toggleSync()"><i class="icons">&#xe116;</i><p class="tab-label">同步</p></button>
			<button id="buttonSr" onclick="toggleLiveview()"><i class="icons">&#xe410;</i><p class="tab-label">Peek</p></button>
			<button id="buttonI" onclick="toggleInfo()"><i class="icons">&#xe066;</i><p class="tab-label">信息</p></button>
			<button id="buttonNodes" onclick="toggleNodes()"><i class="icons">&#xe22d;</i><p class="tab-label">节点</p></button>
			<button onclick="window.location.href=getURL('/settings');"><i class="icons">&#xe0a2;</i><p class="tab-label">配置</p></button>
			<button id="buttonPcm" onclick="togglePcMode(true)"><i class="icons">&#xe23d;</i><p class="tab-label">PC 模式</p></button>
		</div>
		<div id="briwrap">
			<p class="hd">亮度</p>
			<div class="slider" style="padding-right:32px;">
				<i class="icons slider-icon" onclick="tglTheme()" style="transform: translate(-32px,5px);">&#xe2a6;</i>
				<div class="sliderwrap il">
					<input id="sliderBri" onchange="setBri()" oninput="updateTrail(this)" max="255" min="1" type="range" value="128" />
					<div class="sliderdisplay"></div>
				</div>
				<output class="sliderbubble"></output>
			</div>
		</div>
		<iframe id="liveview" src="about:blank"></iframe>
	</div>
</div>

<div class ="container">
	<div id="Colors" class="tabcontent">
		<div id="picker" class="noslide"></div>
		<div id="hwrap" class="slider" style="margin-top: 20px;">
			<div class="sliderwrap il">
				<input id="sliderH" class="noslide" oninput="fromH()" onchange="setColor(0)" max="359" min="0" type="range" value="0" step="any">
				<div class="sliderdisplay" style="background: linear-gradient(90deg, #f00 2%, #ff0 19%, #0f0 35%, #0ff 52%, #00f 68%, #f0f 85%, #f00)"></div>
			</div>
			<span class="tooltiptext">Hue/色调</span>
		</div>
		<div id="swrap" class="slider">
			<div class="sliderwrap il">
				<input id="sliderS" class="noslide" oninput="fromS()" onchange="setColor(0)" max="100" min="0" type="range" value="100" step="any">
				<div class="sliderdisplay" style="background: linear-gradient(90deg, #aaa 0%, #f00)"></div>
			</div>
			<span class="tooltiptext">饱和度</span>
		</div>
		<div id="vwrap" class="slider">
			<div class="sliderwrap il">
				<input id="sliderV" class="noslide" oninput="fromV()" onchange="setColor(0)" max="100" min="0" type="range" value="100" step="any" />
				<div class="sliderdisplay"></div>
			</div>
			<span class="tooltiptext">值/亮度</span>
		</div>
		<div id="kwrap" class="slider">
			<div class="sliderwrap il">
				<input id="sliderK" class="noslide" oninput="fromK()" onchange="setColor(0)" max="10091" min="1900" type="range" value="6550" />
				<div class="sliderdisplay"></div>
			</div>
			<span class="tooltiptext">开尔文/温度</span>
		</div>
		<div id="rgbwrap">
			<!--p class="labels hd">RGB color</p-->
			<div id="rwrap" class="slider">
				<div class="sliderwrap il">
					<input id="sliderR" class="noslide" oninput="fromRgb()" onchange="setColor(0)" max="255" min="0" type="range" value="128" />
					<div class="sliderdisplay"></div>
				</div>
				<span class="tooltiptext">Red/红 通道</span>
			</div>
			<div id="gwrap" class="slider">
				<div class="sliderwrap il">
					<input id="sliderG" class="noslide" oninput="fromRgb()" onchange="setColor(0)" max="255" min="0" type="range" value="128" />
					<div class="sliderdisplay"></div>
				</div>
				<span class="tooltiptext">Green/绿 通道</span>
			</div>
			<div id="bwrap" class="slider">
				<div class="sliderwrap il">
					<input id="sliderB" class="noslide" oninput="fromRgb()" onchange="setColor(0)" max="255" min="0" type="range" value="128" />
					<div class="sliderdisplay"></div>
				</div>
				<span class="tooltiptext">Blue/蓝 通道</span>
			</div>
		</div>
		<div id="wwrap" class="slider">
			<!--p class="labels hd">White channel</p-->
			<div id="whibri" class="sliderwrap il">
				<input id="sliderW" class="noslide" oninput="fromW()" onchange="setColor(0)" max="255" min="0" type="range" value="128" />
				<div class="sliderdisplay"></div>
			</div>
			<span class="tooltiptext">White 通道</span>
		</div>
		<div id="wbal" class="slider">
			<!--p class="labels hd">White balance</p-->
			<div class="sliderwrap il">
				<input id="sliderA" class="noslide" onchange="setBalance(this.value)" max="255" min="0" type="range" value="128" />
				<div class="sliderdisplay"></div>
			</div>
			<span class="tooltiptext">白平衡</span>
		</div>
		<div id="qcs-w">
			<div class="qcs" onclick="pC('#ff0000');" title="Red" style="background-color:#ff0000;"></div>
			<div class="qcs" onclick="pC('#ffa000');" title="Orange" style="background-color:#ffa000;"></div>
			<div class="qcs" onclick="pC('#ffc800');" title="Yellow" style="background-color:#ffc800;"></div>
			<div class="qcs" onclick="pC('#ffe0a0');" title="Warm White" style="background-color:#ffe0a0;"></div>
			<div class="qcs" onclick="pC('#ffffff');" title="White" style="background-color:#ffffff;"></div>
			<div class="qcs qcsb" onclick="pC('#000000');" title="Black" style="background-color:#000000;"></div><br>
			<div class="qcs" onclick="pC('#ff00ff');" title="Pink" style="background-color:#ff00ff;"></div>
			<div class="qcs" onclick="pC('#0000ff');" title="Blue" style="background-color:#0000ff;"></div>
			<div class="qcs" onclick="pC('#00ffc8');" title="Cyan" style="background-color:#00ffc8;"></div>
			<div class="qcs" onclick="pC('#08ff00');" title="Green" style="background-color:#08ff00;"></div>
			<div class="qcs" onclick="pC('rnd');" title="Random" style="background:linear-gradient(to right, red, orange, yellow, green, blue, purple);transform: translateY(-11px);">R</div>
		</div>
		<div id="csl">
			<button id="csl0" class="btn xxs cl" onclick="selectSlot(0);" data-r="0" data-g="0" data-b="0" data-w="0">1</button>
			<button id="csl1" class="btn xxs cl" onclick="selectSlot(1);" data-r="0" data-g="0" data-b="0" data-w="0">2</button>
			<button id="csl2" class="btn xxs cl" onclick="selectSlot(2);" data-r="0" data-g="0" data-b="0" data-w="0">3</button>
		</div>
		<p class="labels h" id="cslLabel"></p>
		<div id="hexw">
			<i class="icons sel-icon" onclick="tglRgb()">&#xe22d;</i>
			<input id="hexc" type="text" class="noslide" onkeydown="hexEnter()" autocomplete="off" maxlength="8" />
			<button id="hexcnf" class="btn btn-xs" onclick="fromHex();"><i class="icons btn-icon">&#xe390;</i></button>
		</div>
		<p class="labels" id="pall"><i class="icons sel-icon" onclick="tglHex()">&#xe2b3;</i> Color palette</p>
		<div id="palw" class="il">
			<div class="staytop fnd">
				<input type="text" placeholder="Search" oninput="search(this,'pallist')" onfocus="search(this,'pallist')" />
				<i class="icons clear-icon" onclick="clean(this)">&#xe38f;</i>
				<i class="icons search-icon">&#xe0a1;</i>
			</div>
			<div id="pallist" class="list">
				<div class="lstI">
					<label class="radio schkl" onclick="loadPalettes()"> 
						<div class="lstIcontent">
							<span class="lstIname">
								Loading...
							</span>
						</div>
					</label>
				</div>
			</div>
		</div>
		<div style="padding-block: 10px;">
			<button class="btn btn-xs" type="button" onclick="window.location.href=getURL('/pxmagic.htm')"><i class="icons btn-icon">&#xe410;</i></button>
			<button class="btn btn-xs" type="button" onclick="window.location.href=getURL('/cpal.htm')"><i class="icons btn-icon">&#xe18a;</i></button>
			<button class="btn btn-xs" type="button" onclick="palettesData=null;localStorage.removeItem('wledPalx');requestJson({rmcpal:true});setTimeout(loadPalettes,250,loadPalettesData);"><i class="icons btn-icon">&#xe037;</i></button>
		</div>
	</div>

	<div id="Effects" class="tabcontent">
		<div id="fx">
			<p class="labels hd" id="modeLabel">特效模式</p>
			<div class="staytop fnd" id="fxFind">
				<input type="text" placeholder="Search" oninput="search(this,'fxlist')" onfocus="search(this,'fxlist');gId('filters').classList.add('fade');" onblur="gId('filters').classList.remove('fade')"/>
				<i class="icons clear-icon" onclick="clean(this);">&#xe38f;</i>
				<i class="icons search-icon" onclick="gId('filters').classList.toggle('hide');" style="cursor:pointer;">&#xe0a1;</i>
			</div>
			<div id="fxlist" class="list">
				<div class="lstI">
					<label class="radio schkl" onclick="loadFX()"> 
						<div class="lstIcontent">
							<span class="lstIname">
								加载...
							</span>
						</div>
					</label>
				</div>
			</div>
		</div>
		<div id="sliders">
			<div id="filters" class="filter">
				<label id="filterPal" class="check fchkl">&#x1F3A8;
					<input type="checkbox" data-flt="&#x1F3A8;" onchange="filterFx(this)">
					<span class="checkmark"></span>
				</label>
				<label id="filter0D" class="check fchkl hide">&#8226;
					<input type="checkbox" data-flt="&#8226;" onchange="filterFx(this)">
					<span class="checkmark"></span>
				</label>
				<label id="filter1D" class="check fchkl">&#8942;
					<input type="checkbox" data-flt="&#8942;" onchange="filterFx(this)">
					<span class="checkmark"></span>
				</label>
				<label id="filter2D" class="check fchkl">&#9638;
					<input type="checkbox" data-flt="&#9638;" onchange="filterFx(this)">
					<span class="checkmark"></span>
				</label>
				<label id="filterVol" class="check fchkl">&#9834;
					<input type="checkbox" data-flt="&#9834;" onchange="filterFx(this)">
					<span class="checkmark"></span>
				</label>
				<label id="filterFreq" class="check fchkl">&#9835;
					<input type="checkbox" data-flt="&#9835;" onchange="filterFx(this)">
					<span class="checkmark"></span>
				</label>
			</div>
			<div id="slider0" class="slider">
				<i class="icons slider-icon" onclick="tglFreeze()">&#xe325;</i>
				<div class="sliderwrap il">
					<input id="sliderSpeed" class="noslide" onchange="setSpeed()" oninput="updateTrail(this)" max="255" min="0" type="range" value="128" />
					<div class="sliderdisplay"></div>
				</div>
				<output class="sliderbubble"></output>
				<span id="sliderLabel0" class="tooltiptext">效果速度</span>
			</div>
			<div id="slider1" class="slider">
				<i class="icons slider-icon" onclick="tglLabels()">&#xe409;</i>
				<div class="sliderwrap il">
					<input id="sliderIntensity" class="noslide" onchange="setIntensity()" oninput="updateTrail(this)" max="255" min="0" type="range" value="128" />
					<div class="sliderdisplay"></div>
				</div>
				<output class="sliderbubble"></output>
				<span class="tooltiptext" id="sliderLabel1">效果强度</span>
			</div>
			<div id="slider2" class="slider hide">
				<i class="icons slider-icon">&#xe410;</i>
				<div class="sliderwrap il">
					<input id="sliderC1" class="noslide" onchange="setCustom(1)" oninput="updateTrail(this)" max="255" min="0" type="range" value="0" />
					<div class="sliderdisplay"></div>
				</div>
				<output class="sliderbubble"></output>
				<span class="tooltiptext" id="sliderLabel2">定制 1</span>
			</div>
			<div id="slider3" class="slider hide">
				<i class="icons slider-icon">&#xe0a2;</i>
				<div class="sliderwrap il">
					<input id="sliderC2" class="noslide" onchange="setCustom(2)" oninput="updateTrail(this)" max="255" min="0" type="range" value="0" />
					<div class="sliderdisplay"></div>
				</div>
				<output class="sliderbubble"></output>
				<span class="tooltiptext" id="sliderLabel3">定制 2</span>
			</div>
			<div id="slider4" class="slider hide">
				<i class="icons slider-icon">&#xe0e8;</i>
				<div class="sliderwrap il">
					<input id="sliderC3" class="noslide" onchange="setCustom(3)" oninput="updateTrail(this)" max="31" min="0" type="range" value="0" />
					<div class="sliderdisplay"></div>
				</div>
				<output class="sliderbubble"></output>
				<span class="tooltiptext" id="sliderLabel4">定制 3</span>
			</div>
			<div id="fxopt" class="option fade">
				<label id="opt0" class="check ochkl hide"><i class="icons">&#xe2b3;</i><span class="tooltiptext" id="optLabel0">核查 1</span>
					<input id="checkO1" type="checkbox" onchange="setOption(1, this.checked)">
					<span class="checkmark"></span>
				</label>
				<label id="opt1" class="check ochkl hide"><i class="icons">&#xe34b;</i><span class="tooltiptext" id="optLabel1">核查 2</span>
					<input id="checkO2" type="checkbox" onchange="setOption(2, this.checked)">
					<span class="checkmark"></span>
				</label>
				<label id="opt2" class="check ochkl hide"><i class="icons">&#xe04c;</i><span class="tooltiptext" id="optLabel2">核查 3</span>
					<input id="checkO3" type="checkbox" onchange="setOption(3, this.checked)">
					<span class="checkmark"></span>
				</label>
			</div>
		</div>
	</div>

	<div id="Segments" class="tabcontent">
		<div id="segcont">
			加载...
		</div>
		<div id="segutil" class="staybot">
		</div>
		<div id="segutil2">
			<button class="btn btn-s" id="rsbtn" onclick="rSegs()">重置分段</button>
		</div>
		<p>过渡: <input id="tt" type="number" min="0" max="65.5" step="0.1" value="0.7">&nbsp;s</p>
		<p id="ledmap" class="hide"></p>
	</div>

	<div id="Presets" class="tabcontent">
		<div id="pql">
		</div>
		<p class="labels hd">预设</p>
		<div class="staytop fnd" id="psFind">
			<input type="text" placeholder="Search" oninput="search(this,'pcont')" onfocus="search(this,'pcont')" />
			<i class="icons clear-icon" onclick="clean(this);">&#xe38f;</i>
			<i class="icons search-icon">&#xe0a1;</i>
		</div>
		<div id="pcont" class="list">
			<span onclick="loadPresets()">加载...</span>
		</div>
		<div id="putil" class="staybot">
		</div>
	</div>
</div>

<div class="tab bot" id="bot">
	<button class="tablinks" onclick="openTab(0)"><i class="icons">&#xe2b3;</i><p class="tab-label">Colors/颜色</p></button>
	<button class="tablinks" onclick="openTab(1)"><i class="icons">&#xe23d;</i><p class="tab-label">Effects/特效</p></button>
	<button class="tablinks" onclick="openTab(2)"><i class="icons">&#xe34b;</i><p class="tab-label">Segments/分段</p></button>
	<button class="tablinks" onclick="openTab(3)"><i class="icons">&#xe04c;</i><p class="tab-label">Presets/预设</p></button>
</div>

<div id="connind"></div>
<div id="toast" onclick="clearErrorToast(100);"></div>
<div id="namelabel" onclick="toggleNodes()"></div>
<div id="info" class="modal">
	<button class="btn btn-xs close" onclick="toggleInfo()"><i class="icons rot45">&#xe18a;</i></button>
	<div id="imgw">
		<img class="wi" alt="" src="" />
	</div>
	<div id="kv">Loading...</div><br>
	<div>
		<button class="btn infobtn" onclick="requestJson()">刷新</button>
		<button class="btn infobtn" onclick="toggleNodes()">实例列表</button>
		<button class="btn infobtn" onclick="window.open(getURL('/update'),'_self');">更新WLED</button>
		<button class="btn infobtn" id="resetbtn" onclick="cnfReset()">重启WLED</button>
	</div>
	<br>
	<span class="h">Made with <span id="heart">&#10084;&#xFE0E;</span> by Aircoookie and the <a href="https://wled.discourse.group/" target="_blank">WLED community</a></span>
</div>

<div id="nodes" class="modal">
	<button class="btn btn-xs close" onclick="toggleNodes()"><i class="icons rot45">&#xe18a;</i></button>
	<div id="ndlt">WLED实例</div>
	<div id="kn">加载...</div>
	<div style="position:sticky;bottom:0;">
		<button class="btn infobtn" onclick="loadNodes()">刷新</button>
	</div>	
</div>

<div id="mlv2D" class="modal">
	<div id="klv2D" style="width:100%; height:100%">加载...</div>
</div>

<div id="rover" class="modal">
	<i class="icons huge">&#xe410;</i><br>
	<div id="lv">?</div><br><br>
	要使用内置效果，请使用下面的重写按钮。<br>
	您可以通过按下左上角的星号返回实时模式。<br>
	<button class="btn" onclick="setLor(1)">重写一次</button>
	<button class="btn" onclick="setLor(2)">重写直到重新启动</button><br>
	<span class="h">为了获得最佳性能，建议在不使用时关闭流媒体源。</span>
</div>

<i id="roverstar" class="icons huge" onclick="setLor(0)">&#xe410;</i><br>
<script src="index.js"></script>
</body>
</html>
